/*
 * global_hw.c
 *
 *  Created on: 13.10.2012
 *      Author: md5sum@alexsp.ru
 */


#include "global.h"

/*Глобальные переменные*/
int16_t room_temp; //температура помещения
int16_t heater_temp; //температура нагревателя
int16_t radiator_temp; //температура батареи
main_status_t main_status= STATUS_WAIT;

hw_ret_status room_last_err,heater_last_err,radiator_last_err;
uint8_t room_err_cnt=0;
uint8_t heater_err_cnt=0;
uint8_t radiator_err_cnt=0;


times_array_elem_t times_array[7][POINTS_ON_DAY];

int16_t heater_temp_max; // максимальная температура для нагревателя ~80-90 град
int16_t heater_temp_min; // минимальная температура для нагревателя при которой опять включаем нагрев
int16_t radiator_temp_offset; //температура отключения насоса - относительно температуры помещения
int16_t error_temp; //Эта температура будет поддерживаться в случае сбоя часов.

uint8_t flags=0;
tm current_time;
tm last_pow_off_time;
tm tmp_time;
uint16_t user_time;
uint8_t next_time;
int8_t current_temp;
int8_t next_temp;

/*Тут инициализация переферии МК*/
void init_hw(void) __attribute__ ((naked)) __attribute__ ((section (".init6")));
void init_hw(void){
	LCD_LAMP_ddr|=LCD_LAMP_pin;
	//	LCD_LAMP_port&=~LCD_LAMP_pin;
	LCD_LAMP_port|=LCD_LAMP_pin;

	/*USART*/
	UCSRA=(1<<U2X);
	UCSRB=(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)|(0<<RXEN)|(1<<TXEN)|(0<<UCSZ2);
	UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
	UBRRL=(F_CPU/(8*USART_BAUD))-1;

	/*Часы*/
	/*Подтяжка входа секунд*/
	DDRD&=~(1<<PD3);
	PORTD|=(1<<PD3);
	MCUCR=(1<<ISC11)|(1<<ISC10); /*int1 - секундные импульсы*/
	GICR|=(1<<INT1);
	GIFR|=(1<<INTF1);

	/*TIMER1 будет следить за работой часов - при переполнении вываливаемся в ошибку*/
	TCCR1A=0;
	TCNT1=0;
	OCR1A=24000;
	TCCR1B=(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10); // Fclk/1024
	TIFR|=(1<<OCF1A);
	TIMSK|=(1<<OCIE1A);

	/*таймер2 формирует ~1 мсек задержку*/
	TCCR2=(1<<WGM21)|(1<<CS22)|(0<<CS21)|(1<<CS20); // CTC && Fclk/1024
	OCR2=125;
	TIFR|=(1<<OCF2);
	//	TIMSK|=(1<<TOIE2);

	/*TWI*/
	TWBR=18;
	TWSR=0;
	TWCR=(1<<TWEN);

	/*Ключи: все порты в OUT и в 0*/
	OUT_ALL_OFF();
	OUT_DDR=(1<<OUT1)|(1<<OUT2)|(1<<OUT3)|(1<<OUT4);

	/*Подтяжка кнопок*/
	KEY_DDR&=~(K_LEFT|K_RIGHT|K_ENTER|K_EXIT);
	KEY_PORT|=(K_LEFT|K_RIGHT|K_ENTER|K_EXIT);
}
